package com.zdw.demo.dto;


import lombok.Data;

import java.io.Serializable;

/**
 * 微信退款 实体
 */
@Data
public class WechatRefund implements Serializable {

    // 构造器
    public WechatRefund(String transaction_id, String out_trade_no, String out_refund_no, String reason, String notify_url, String funds_account, double refund, double total) {
        this.transaction_id = transaction_id;
        this.out_trade_no = out_trade_no;
        this.out_refund_no = out_refund_no;
        this.reason = reason;
        this.notify_url = notify_url;
        this.funds_account = funds_account;
        this.amount = new WechatAmount(refund, total, "CNY");
    }

    // 原支付交易对应的微信订单号(和商户内部订单号其中一个必填)
    private String transaction_id;

    // 商户订单号(和微信订单号其中一个必填)
    private String out_trade_no;

    // 商户退款单号(必填)
    private String out_refund_no;

    // 退款原因(若传入,会在下发给用户的退款消息中体现退款原因)
    private String reason;

    // 通知地址
    private String notify_url;

    /**
     * 退款资金来源
     * AVAILABLE：可用余额账户
     */
    private String funds_account;

    // 订单金额信息(必填)
    private WechatAmount amount;

    // 退款商品(指定商品退款需要传此参数，其他场景无需传递)

    /**
     * 退款金额 实体
     */
    @Data
    public class WechatAmount implements Serializable {

        // 退款金额(单位:分)
        private double refund;

        // 总金额(单位:分)
        private double total;

        // 货币类型(仅支持人民币CNY)
        private String currency;

        // 退款出资账户及金额

        // 内部类构造器
        public WechatAmount(double refund, double total, String currency) {
            this.refund = refund;
            this.total = total;
            this.currency = currency;
        }
    }


}
